超簡単!今すぐ使える「クロスアカウントアクセス」
こんにちは!ももんが大好きの小山です。
きょうは、「便利なんだろうなあ」と思いつつ試したことがなかったクロスアカウントアクセスを設定してみました。本当に簡単にできたので、まだ試したことがないという方はぜひやってみてください!
クロスアカウントアクセスとは
あなたは、今まで所有していたアカウントA (123423453456) に加えてアカウントB (654354324321) のリソースを管理することになりました。そこであなたはアカウントBに新しいIAMユーザーを作成しましたが、これによって管理すべきログイン情報が増えてしまいました。しばらくすると、こんな不安が生まれます。「今は構わないけど、もっとアカウントが増えたらどうなるんだろうか...」
そこでクロスアカウントアクセスの出番です! クロスアカウントアクセスを使うと、「アカウントAのプリンシパル」から「アカウントBのリソース」を操作できるようになります。
プリンシパルは、アクションを実行してリソースにアクセスできる AWS 内のエンティティです。AWS アカウント("root" ユーザー)、IAM ユーザー、またはロールをプリンシパルにすることができます。次の 2 つの方法のいずれかを使用して、リソースへのアクセス権限を付与できます。
ユーザー(直接、またはグループ経由で間接的に)またはロールに対し、アクセス権限ポリシーをアタッチすることができます。 リソースベースのポリシーをサポートするサービスについては、リソースにアタッチされているポリシーの Principal 要素でプリンシパルを指定できます。 AWS アカウントをプリンシパルにする場合、通常はアカウント内で定義されているすべてのプリンシパルが対象となります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::654354324321:root" }, "Action": "sts:AssumeRole" } ] }
とにかくやってみましょう!
アカウントBの準備
まずはアカウントBの Identity and Access Management (IAM) コンソールを開きます。
画面左のナビゲーションペインからRolesを開いて、Create New Roleを選択します。
Set Role Nameページでは、任意の名称を入力してNext Stepを選択しましょう。
Select Role Typeページでは、Provide access between... (Role for Cross-Account Access) を選択します。
Establish Trustページでは、アカウントAのIDを入力してNext Stepを選択します。ここで Require MFA を選択すると、アカウントAでサインインに使用したIAMユーザーで多要素認証が有効でなかった場合のアクセスを拒否することができます。
Attach Policyページでは、与えたい権限が記述されたポリシーを選択します。今回は AWS 管理ポリシーのひとつを選択しましたが、あらかじめ用意したカスタム管理ポリシーを選択することもできます。
管理ポリシーとインラインポリシー - AWS Identity and Access Management
Reviewページでは、内容を確かめてCreate Roleを選択しましょう。
新しいIAMロールが作成できました! 赤く囲った部分のリンクを控えておきましょう。
やってみる前に
クロスアカウントアクセスに用いるIAMユーザー (アカウントA) には、スイッチロールのための許可が必要です。以下のようなポリシーを割り当てて、sts:AssumeRoleアクションを許可しましょう。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::654354324321:role/switchFrom-123423453456" ] } ] }
アカウント/IAMロールにかかわらずスイッチを許可したい場合は、リソース名をワイルドカードで置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "*" ] } ] }
やってみる
アカウントAの Identity and Access Management (IAM) コンソールを開いて、ナビゲーションバーの右端に表示されたIAMユーザーを選択します。表示されたメニューからSwitch Roleを選択しましょう。
もう一度Switch Roleを選択します。
Switch Roleページでは、アカウントBのIDとクロスアカウントアクセスのために作成したIAMロールの名称を指定してSwitch Roleボタンを選択します。
パスワードを入力することなく、アカウントBのマネジメントコンソールを開くことができました! ナビゲーションバーの右端には、クロスアカウントアクセスに使用したIAMロールが表示されています。これを選択すると...
左側にはアカウントAでサインインに使用したIAMユーザー、右側にはクロスアカウントアクセスで用いたIAMロールが表示されます。アカウントAに戻りたいときは、青く囲ったBack to IAM_Userを選択しましょう!
おわりに
いかがでしたか? マネジメントコンソールを使うと、クロスアカウントアクセスを簡単に設定できることがわかりました。ここで用いられる Switch Role 機能は、マネジメントコンソールが AWS Security Token Service (STS) の AssumeRole API を呼び出すことにより実現しています。詳細について関心のある方は、ぜひ以下の記事をご覧になってください! いかに IAM が面白い機能であるかということを実感してもらえると思います。
IAMロール徹底理解 〜 AssumeRoleの正体 | Developers.IO
したっけまた!
IAM とは - AWS Identity and Access Management
IAM ユーザーにアクセス権限を委任するロールの作成 - AWS Identity and Access Management
ロールの切り替え(AWS マネジメントコンソール) - AWS Identity and Access Management